/*
 * Copyright 2012 Alain Pannetrat (L1L1@gmx.com)
 * 
 * This file is part of cookie-miner.
 * 
 * cookie-miner is free software: you can redistribute it and/or modify 
 * it under the terms of the GNU General Public License as published by 
 * the Free Software Foundation, either version 3 of the License, or 
 * (at your option) any later version.
 * 
 * cookie-miner is distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License 
 * along with cookie-miner. If not, see http://www.gnu.org/licenses/.
 *
 * @version: $Id$
 *
 */
#ifndef _HTTP_PROXY_H_
#define _HTTP_PROXY_H_

#include "common.h"
#include "json.h"
#include "http_packet.h"
#include <list>

class HttpFilter {
	public:
		virtual bool apply(HttpPacket &packet) { return true; }
		virtual ~HttpFilter() { }
};

typedef std::list<HttpFilter*> HttpFilterList;

class HttpProxy : private Uncopyable {
	public:
		HttpProxy(Json::Value* config); 
	
		Json::Value* config() const { return _config; }

		bool run();
		
		HttpFilterList& filters() { return _filters; }

		bool filter_packet(HttpPacket& packet) const;

		~HttpProxy();	
	private:
		Json::Value* _config;
		HttpFilterList _filters;
};


#endif
